/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tpv;

import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XML11Serializer;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 *
 * @author alex952
 */
public class SalidaXML implements Salida
{

	private String ruta;

	public SalidaXML(String ruta)
	{
		this.ruta = ruta;
	}

	@Override
	public void imprimir(Venta venta)
	{
		DecimalFormat df = new DecimalFormat("###.##");

		Double precioTotal = 0.0;
		Double descTotal = 0.0;
		Element e = null;
		Node n = null;
		Document xmldoc = new DocumentImpl();
		Element root = xmldoc.createElement("ticket");
		if (venta != null)
		{
			ArrayList<LinVenta> lineas = (ArrayList<LinVenta>) venta.getLineas();
			for (LinVenta linea : lineas)
			{
				Producto p = linea.getItem();

				e = xmldoc.createElement("linTicket");


				Element e1 = xmldoc.createElement("descr");
				Node n2 = xmldoc.createTextNode(p.getDescripcion());
				e1.appendChild(n2);
				e.appendChild(e1);

				e1 = xmldoc.createElement("cant");
				n2 = xmldoc.createTextNode(linea.getCantidad().toString());
				e1.appendChild(n2);
				e.appendChild(e1);

				e1 = xmldoc.createElement("pUnit");
				n2 = xmldoc.createTextNode(df.format(p.getPrecio()).toString());
				e1.appendChild(n2);
				e.appendChild(e1);

				descTotal += linea.getDescuento();

				e1 = xmldoc.createElement("dctoLin");
				n2 = xmldoc.createTextNode(df.format(linea.getDescuento()).toString());
				e1.appendChild(n2);
				e.appendChild(e1);

				Double precioGen = p.getPrecio() * linea.getCantidad() - linea.getDescuento();
				precioTotal += precioGen;

				e1 = xmldoc.createElement("pLin");
				n2 = xmldoc.createTextNode(df.format(precioGen).toString());
				e1.appendChild(n2);
				e.appendChild(e1);

				root.appendChild(e);
			}
			if (lineas.size() != 0)
			{
				e = xmldoc.createElement("totalAPagar");
				e.setAttribute("cant", df.format(precioTotal).toString());
				root.appendChild(e);
				e = xmldoc.createElement("dctoAcumulado");
				e.setAttribute("cant", df.format(descTotal).toString());
				root.appendChild(e);
				e = xmldoc.createElement("impuestos");
				e.setAttribute("cant", df.format(venta.getImpuestos()).toString());
				root.appendChild(e);
			}
		}
		xmldoc.appendChild(root);

		FileOutputStream fos = null;

		try
		{
			fos = new FileOutputStream(this.ruta);
			OutputFormat of = new OutputFormat("XML", "UTF-8", true);
			of.setIndent(1);
			of.setIndenting(true);

			XMLSerializer serializer = new XML11Serializer(fos, of);
			serializer.asDOMSerializer();
			serializer.serialize(xmldoc.getDocumentElement());
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
			return;
		}
		finally
		{
			if (fos != null)
			{
				try
				{
					fos.close();
				}
				catch (IOException ex)
				{
					ex.printStackTrace();
					return;
				}
			}
		}

	}
}
